package com.nageoffer.shortlink.admin.common.annotation;

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.nageoffer.shortlink.admin.common.enums.desensitization.DesensitizationDataTypeEnum;
import com.nageoffer.shortlink.admin.common.enums.desensitization.DesensitizationTypeEnum;
import com.nageoffer.shortlink.admin.common.serializer.DesensitizationSerializer;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @description 脱敏注解
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = DesensitizationSerializer.class)
public @interface Desensitization {

    /**
     * 脱敏数据类型
     *
     * @return
     */
    DesensitizationDataTypeEnum dataType();

    /**
     * 是否解密，默认false
     */
    //boolean decrypt() default false;

    /**
     * 脱敏类型
     *
     * @return
     */
    DesensitizationTypeEnum type() default DesensitizationTypeEnum.DEFAULT;

    /**
     * 尾部不脱敏的长度，默认1，当type为HEAD或HEAD_TAIL时使用
     */
    int tailNoMaskLen() default 1;

    /**
     * 头部不脱敏的长度，默认1，当type为TAIL或HEAD_TAIL时使用
     */
    int headNoMaskLen() default 1;

    /**
     * 中间不脱敏的长度，默认1，当type为MIDDLE时使用
     */
    int middleNoMaskLen() default 1;

    /**
     * 脱敏字符，默认*
     */
    char maskCode() default '*';

}
